The first computers were largely stand-alone units with no direct connection to other computers or computer networks. Users mainly accomplished configuration of software programs installed on the computers with direct terminal access to the computers. Over time, more and more computers were connected to each other using Local Area Networks or “LANs.” In both cases, maintaining proper configuration of installed software was relatively simple because the overall computing environment was limited and clearly defined.
With the ever-increasing popularity of the Internet, more and more computers are connected to larger networks. Today, the Internet provides access to vast public and private network services. Some of these network services are implemented as complex, large-scale distributed computing systems. A modern network service can involve numerous (e.g., tens or more) different software products or “applications” executing on many (e.g., hundreds or more) commodity-class computing devices in multiple data center facilities.
As more and more network services are implemented on more commodity server computing devices as opposed to fewer enterprise-class server computing devices, a whole new set of challenges face providers and operators of network services: the previously small-scale, well-understood computing environments are now large, complex N-tier distributed computer systems with relatively high host failure rates. A particular set of challenges involves maintaining the proper configuration of all of the applications that execute on the many hosts. A current approach to maintaining application configuration by having an administrator interface with each host individually (e.g., by “SSH'ing” into the host) does not scale when the number of hosts is large. Further, due to its manual and repetitive nature, the current approach can result in inconsistent or incomplete configuration that causes application downtime or otherwise improper network service operation. A new approach for maintaining the configuration of applications deployed as part of a network service that is tolerant to host failure and is more reliable and efficient than current approaches is needed.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.